// 测试TypeScript特定的ESLint规则

// -----------------------------------------------------
// 1. 类型导入测试
// -----------------------------------------------------

// 测试 @typescript-eslint/consistent-type-imports
import { ref, computed } from 'vue'
// 应使用type导入，已删除vue-router的导入，因为未安装

// 正确的类型导入
import type { Component } from 'vue'

// -----------------------------------------------------
// 2. 类型定义测试
// -----------------------------------------------------

// 测试 @typescript-eslint/type-annotation-spacing
interface User {
  // 缺少空格
  id: number // 冒号后缺少空格
  name: string // 冒号后多余空格
  role: string
}

// 测试 @typescript-eslint/no-explicit-any
function processData(data: any) {
  // 使用any
  return data
}

// 测试 @typescript-eslint/no-non-null-assertion
function getUser(id: number | null) {
  const user = id! // 使用非空断言
  return user
}

// -----------------------------------------------------
// 3. 类型使用测试
// -----------------------------------------------------

// 测试类型别名
type UserRole = 'admin' | 'user' | 'guest'

interface Employee {
  id: number
  name: string
  role: UserRole
  department?: string // 可选属性
}

// 测试泛型
class DataService<T> {
  private items: T[] = []

  add(item: T): void {
    this.items.push(item)
  }

  getAll(): T[] {
    return this.items
  }
}

// 测试类型断言
const userInput = '123'
const userId = userInput as unknown as number // 多重类型断言

// -----------------------------------------------------
// 4. 更多TypeScript测试
// -----------------------------------------------------

// 测试函数类型
type Callback = (error: Error | null, result?: unknown) => void

function fetchData(callback: Callback): void {
  // 实现
}

// 测试索引签名
interface Dictionary {
  [key: string]: unknown
}
